/**
 * 在调用 formatDate 函数时。例如，yyyy 会被替换成年份的四位数，dd 会被替换成日期的两位数。如果占位符不在格式字符串中出现，那么它将被忽略
 * @param date 第一个参数是一个 Date 对象，
 * @param format 第二个参数是一个格式字符串。格式字符串可以包含 yyyy、yy、MM、M、dd、d、HH、H、mm、m、ss、s、SSS 和 S 这些占位符，它们会被替换成对应的日期时间值
 * @returns {*}
 */
interface _date{
  _date:Date,
  format:string
}

export function formatDate(_date:Date,format:string) {
  format=format||'yyyy-MM-dd HH:mm:ss'
  const year = _date.getFullYear();
  const month = _date.getMonth() + 1;
  const day = _date.getDate();
  const hour = _date.getHours();
  const minute = _date.getMinutes();
  const second = _date.getSeconds();
  const millisecond = _date.getMilliseconds();

  const formatOptions = {
    yyyy: year,
    yy: year.toString().slice(-2),
    MM: month.toString().padStart(2, '0'),
    M: month,
    dd: day.toString().padStart(2, '0'),
    d: day,
    HH: hour.toString().padStart(2, '0'),
    H: hour,
    mm: minute.toString().padStart(2, '0'),
    m: minute,
    ss: second.toString().padStart(2, '0'),
    s: second,
    SSS: millisecond.toString().padStart(3, '0'),
    S: millisecond,
  };

  // @ts-ignore
  return format.replace(/yyyy|yy|MM|M|dd|d|HH|H|mm|m|ss|s|SSS|S/g, match => formatOptions[match]);
}


/***
 * 计算输入阳历日期到今天的时间
 * @param date
 * @returns number
 */
function daysFromToday(date:Date) {
  // 将输入日期和今天的日期都转换为时间戳（单位为毫秒）
  const inputDate = new Date(date).getTime();
  const today = new Date().getTime();

  // 计算两个时间戳之间的毫秒差异，然后将其转换为天数
  const differenceInMs = inputDate - today;
  const differenceInDays = Math.floor(differenceInMs / (1000 * 60 * 60 * 24));

  // 返回天数差异
  return differenceInDays;
}

